<?php 
/*
 Plugin Name: Система контроля заказов для yamme.ru
 Description: Система  заказов
 Version: 1.0
 Author: Юлия Евстратенко
 Author URI: http://www.webcustoms.com.ua/
*/
 //ini_set('display_errors', '1');
 //ini_set('error_reporting', E_ALL);
// Stop direct call
if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You are not allowed to call this page directly.'); }

if (!class_exists('AdvUserOrders')) {
 class AdvUserOrders {
 
	## Хранение внутренних данных
	public $data = array();
	
	## Конструктор объекта
	## Инициализация основных переменных
	function AdvUserOrders()
	{
		global $wpdb;
		
		## Объявляем константу инициализации нашего плагина
		DEFINE('AdvUserOrders', true);
		
		## Название файла нашего плагина 
		$this->plugin_name = plugin_basename(__FILE__);
		
		## URL адресс для нашего плагина
		$this->plugin_url = trailingslashit(WP_PLUGIN_URL.'/'.dirname(plugin_basename(__FILE__)));
		
		## Таблица для хранения наших отзывов
		## обязательно должна быть глобально объявлена перменная $wpdb
		$this->tbl_adv_orders   = $wpdb->prefix . 'adv_orders';
		
		## Функция которая исполняется при активации плагина
		register_activation_hook( $this->plugin_name, array(&$this, 'activate') );
		
		## Функция которая исполняется при деактивации плагина
		register_deactivation_hook( $this->plugin_name, array(&$this, 'deactivate') );
		
		##  Функция которая исполняется удалении плагина
		register_uninstall_hook( $this->plugin_name, array(&$this, 'uninstall') );
		
		// Если мы в адм. интерфейсе
		if ( is_admin() ) {
			
			// Добавляем стили и скрипты
			add_action('wp_print_scripts', array(&$this, 'admin_load_scripts'));
			add_action('wp_print_styles', array(&$this, 'admin_load_styles'));
			
			// Добавляем меню для плагина
			add_action( 'admin_menu', array(&$this, 'admin_generate_menu') );
			
		} else {
		    // Добавляем стили и скрипты
			add_action('wp_print_scripts', array(&$this, 'site_load_scripts'));
			add_action('wp_print_styles', array(&$this, 'site_load_styles'));
			
			add_shortcode('order_form', array (&$this, 'site_show_orderform'));
		}
	}
	
	/**
	 * Загрузка необходимых скриптов для страницы управления 
	 * в панели администрирования
	 */
	function admin_load_scripts()
	{
		// Региестрируем скрипты
		wp_register_script('yamme_orders_js', $this->plugin_url . 'js/admin-scripts.js' );
		wp_enqueue_script('yamme_orders_js');
	}
	
	/**
	 * Загрузка необходимых стилей для страницы управления 
	 * в панели администрирования
	 */
	function admin_load_styles()
	{	
		// Регистрируем стили 
		wp_register_style('yamme_orders_css', $this->plugin_url . 'css/admin-style.css' );
		// Добавляем стили
        wp_enqueue_style('yamme_orders_css');
	}
	
	/**
 	 * Генерируем меню
	 */
	function admin_generate_menu()
	{
		// Добавляем основной раздел меню
		add_menu_page('Добро пожаловать в модуль управления заказами', 'Заказы', 'manage_options', 'edit-orders', array(&$this, 'admin_edit_orders'), '', 7);
		// Добавляем дополнительный раздел
		add_submenu_page( 'edit-orders', 'О плагине', 'О плагине', 'manage_options', 'plugin_info', array(&$this,'admin_plugin_info'));
	}
	
	/**
	 * Выводим список отзывов для редактирования
	 */
	public function admin_edit_orders()
	{
		global $wpdb;
		
		$action = isset($_GET['action']) ? $_GET['action'] : null ;
		
		switch ($action) {
		
			case 'edit':
				// Получаем данные из БД
				$this->data['order'] 	= $wpdb->get_row("SELECT * FROM `" . $this->tbl_adv_orders . "` WHERE `ID`= ". (int)$_GET['id'], ARRAY_A);
				
				// Подключаем страницу для отображения результатов 
				include_once('edit_order.php');
			break;
			
			case 'submit':
				$inputData = array(
					'order_order_status'   => $_POST['order_order_status'],
				);
			
				$editId=intval($_POST['id']);
				if ($editId == 0) return false;
			
				// Обновляем существующую запись
				$wpdb->update( $this->tbl_adv_orders, $inputData, array( 'ID' => $editId ));
				
				// Показываем список отзывов
				$this->admin_show_orders();
			break;
			
			case 'delete':
			
				// Удаляем существующую запись
				$wpdb->query("DELETE FROM `".$this->tbl_adv_orders."` WHERE `ID` = '". (int)$_GET['id'] ."'");
				
				// Показываем список отзывов
				$this->admin_show_orders();
			break;
			
			default:
				$this->admin_show_orders();
		}
		
	}
	
	/**
	 * Функция для отображения списка отзывов в адм. панели
	 */
	private function admin_show_orders()
	{
		global $wpdb;
		
		// Получаем данные из БД
		$this->data['orders'] 	 = $wpdb->get_results("SELECT * FROM ".$this->tbl_adv_orders . "", ARRAY_A);
		
		// Подключаем страницу для отображения результатов 
		include_once('view_orders.php');
	}
	
	/**
	 * Показываем статическую страницу
	 */
	public function admin_plugin_info()
	{
		include_once('plugin_info.php');
	}
	
	function site_load_scripts()
	{
	}

	function site_load_styles()
	{
		wp_register_style('yamme_order_css', $this->plugin_url . 'css/site-style.css' );
		wp_enqueue_style('yamme_order_css');
	}
	
	/**
	 * Список отзывов на сайте
	 */
	public function site_show_orderform($atts, $content=null)
	{
		global $wpdb;
		
		if (isset($_POST['action']) && $_POST['action'] == 'add-order') {
			$this->add_user_order();
		}
		
		// Выбираем все отзывы из Базы Данных
		$this->data['orders'] = $wpdb->get_results("SELECT * FROM `" . $this->tbl_adv_orders . "`", ARRAY_A);
		
		## Включаем буферизацию вывода
		ob_start ();
		include_once('site_orders.php');
		## Получаем данные
		$output = ob_get_contents ();
		## Отключаем буферизацию
		ob_end_clean ();
		
		return $output;
	}
	
	private function add_user_order() 
	{
		global $wpdb;
		$inputData = array(
			'order_prod_title' 		  => strip_tags($_POST['order_prod_title']),
			'order_prod_price' 	  => strip_tags($_POST['order_prod_price']),
			'order_user_name'   => strip_tags($_POST['order_user_name']),
			'order_user_email' 	  	  => strip_tags($_POST['order_user_email']),
			'order_user_phone' 		  => strip_tags($_POST['order_user_phone']),
			'order_prod_description' 	  => strip_tags($_POST['order_prod_description']),
			'order_order_status'   => strip_tags($_POST['order_order_status']),
		);
		// Добавляем новый заказ в базу	
		$wpdb->insert( $this->tbl_adv_orders, $inputData );
		
		$admin_email = get_option('admin_email');
		$message = '';
	
		$user_mail = strip_tags($_POST['order_user_email']);
		wp_mail($admin_email, 'Поступил новый заказ', $message, $headers_admin); 
		$headers_admin = 'От: '.strip_tags($_POST['order_user_name']).' '.strip_tags($_POST['order_user_email'])."\r\n";
		wp_mail($user_mail, 'Ваш заказ',$message, $headers);

	}

 }
}

global $yamme_orders;
$yamme_orders = new AdvUserOrders();